/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Service;

import DB.Derivacion;
import DB.HibernateUtil;
import DB.Paciente;
import java.util.List;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author hernan
 */
@WebService(serviceName = "DerivacionWS")
public class DerivacionWS {
    
    @WebMethod(operationName = "agregarDerivacion")
    public boolean agregarDerivacion(@WebParam(name = "apellidoPaternoPaciente") String apellidoPaternoPaciente,
                              @WebParam(name = "apellidoMaternoPaciente") String apellidoMaternoPaciente,
                              @WebParam(name = "apellidoPaternoProfesional") String apellidoPaternoProfesional,
                              @WebParam(name = "apellidoMaternoProfesional") String apellidoMaternoProfesional,
                              @WebParam(name = "descripcion") String descripcion, 
                              @WebParam(name = "fecha") String fecha,
                              @WebParam(name = "nombresPaciente") String nombresPaciente,
                              @WebParam(name = "nombresPofesional") String nombresProfesional,
                              @WebParam(name = "rutPaciente") String rutPaciente,
                              @WebParam(name = "rutProfesional") String rutProfesional,
                              @WebParam(name = "visible") boolean visible
                              ){
        
        Derivacion d = new Derivacion();
        d.setApellidoPaternoPaciente(apellidoPaternoPaciente);
        d.setApellidoMaternoPaciente(apellidoMaternoPaciente);
        d.setApellidoPaternoProfesional(apellidoPaternoProfesional);
        d.setApellidoMaternoProfesional(apellidoMaternoProfesional);
        d.setDescripcion(descripcion);
        d.setFecha(fecha);
        d.setNombresPaciente(nombresPaciente);
        d.setNombresProfesional(nombresProfesional);
        d.setRutPaciente(rutPaciente);
        d.setRutProfesional(rutProfesional);
        d.setVisible(visible);
        return ControladorDeObjetos.saveObject(d);
    }

    @WebMethod(operationName = "listarDerivacion")
    public List<Derivacion> listarDerivacion() {
        return ControladorDeObjetos.getAllObjectByClassType(Derivacion.class);
    }

    @WebMethod(operationName = "cargarDerivacion")
    public Object cargarDerivacion(@WebParam(name = "id") Long id) {
        return ControladorDeObjetos.loadObjectByLongId(id, Derivacion.class);
    }
    
    @WebMethod(operationName = "modificarDerivacion")
    public boolean modificarDerivacion(Derivacion d){
        return ControladorDeObjetos.updateObject(d);
    }
    
    @WebMethod(operationName = "eliminarDerivacion")
    public boolean eliminarDerivacion(@WebParam(name = "id") Long id){
        Derivacion d = (Derivacion) ControladorDeObjetos.loadObjectByLongId(id, Derivacion.class);
        d.setVisible(false);
        return ControladorDeObjetos.updateObject(d);
    }  
   
    @WebMethod(operationName = "restaurarDerivacion")
    public boolean restaurarDerivacion(@WebParam(name = "id") Long id){
        Derivacion d = (Derivacion) ControladorDeObjetos.loadObjectByLongId(id, Derivacion.class);
        d.setVisible(true);
        return ControladorDeObjetos.updateObject(d);
    } 
    
    @WebMethod(operationName = "filtrarDerivacion")
    public List<Derivacion> filtrarDerivacion(@WebParam(name = "buscar") String buscar) {
        
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = s.beginTransaction();
        Criteria c = s.createCriteria(Derivacion.class).add(
            Restrictions.or(
                Restrictions.or(
                    Restrictions.or(
                        Restrictions.ilike("rutPaciente", "%" + buscar + "%"), 
                        Restrictions.ilike("nombresPaciente", "%" + buscar + "%")
                    ),
                    Restrictions.or(
                        Restrictions.ilike("ApellidoPaternoPaciente", "%" + buscar + "%"), 
                        Restrictions.ilike("ApellidoMaternoPaciente", "%" + buscar + "%")
                    )
                ),
                Restrictions.or(
                    Restrictions.or(
                        Restrictions.ilike("rutProfesional", "%" + buscar + "%"), 
                        Restrictions.ilike("nombresProfesional", "%" + buscar + "%")
                    ),
                    Restrictions.or(
                        Restrictions.or(
                            Restrictions.ilike("ApellidoPaternoProfesional", "%" + buscar + "%"), 
                            Restrictions.ilike("ApellidoMaternoProfesional", "%" + buscar + "%")
                    ),
                        Restrictions.or(
                            Restrictions.ilike("Fecha", "%" + buscar + "%"), 
                            Restrictions.ilike("Descripcion", "%" + buscar + "%")
                        )
                    )
                )
            )
        );

        List l = c.list();
        s.close();
        return l;
    }
}
